package org.ch03.test06;

import java.util.ArrayList;
import java.util.List;

/**
 * 型变
 * 1)不变 : 赋值运行符左右两边的泛型必须一致
 * 2)协变 : 子类型的泛型可以赋值给父类型的泛型 - 通配符 - <? extends T>
 * 3)逆变 : 父类型的泛型可以赋值给子类型的泛型 - 通配符 - <? super T>
 *
 *
 * @author ZQX
 * @date 2025-03-27
 */
public class MainTest02 {
    public static void main(String[] args) {
        // 泛型的协变性 - 应用场景：只读不写
        // ? 表示未知类型，但可以确定要么是 Animal 类型，
        // 要么是 Animal 类型的子类
        List<? extends Animal> list = new ArrayList<Dog>();

        // 错误 - add 是一个含泛型参数的方法 - 为了确保类型安全，无法调用协变后的对象中含泛型参数的方法
        // list.add(new Dog()) ;
    }
}
